package com.thread.pool.application.scanner.demo;


import com.thread.pool.application.scanner.factory.ActionHandleFactory;
import com.thread.pool.application.scanner.factory.NamedThreadFactory;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.*;

public class AnnotationDemo {
    private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
            //线程池大小
            3,
            //线程池最大数量
            10,
            //超出 corePoolSize 后创建的线程存活时间或者是所有线程最大存活时间，取决于配置。
            10L,
            //keepAliveTime 的时间单位
            TimeUnit.SECONDS,
            //任务队列，是一个阻塞队列，当线程数已达到核心线程数，会将任务存储在阻塞队列中。100-队列数量
            new LinkedBlockingQueue(100),
            //线程名称
            // TODO: 2022/11/6 增加线程工厂
            new NamedThreadFactory("async-task-pool-"),
            //拒绝策略；当队列已满并且线程数量达到最大线程数量时，会调用该方法处理该任务。
            new ThreadPoolExecutor.CallerRunsPolicy());

    /**
     * RejectedExecutionHandler的实现JDK自带的默认有4种
     * AbortPolicy：丢弃任务，抛出运行时异常
     * CallerRunsPolicy：由提交任务的线程来执行任务
     * DiscardPolicy：丢弃这个任务，但是不抛异常
     * DiscardOldestPolicy：从队列中剔除最先进入队列的任务，然后再次提交任务
     */

    private static final int poolSize = 5;
    private static final int maxPoolSize = threadPoolExecutor.getMaximumPoolSize();
    private static final String status = "RUNNING";

    public static void main(String[] args) {

    }
}
